package main

import (
	"fmt"
)

func main() {
	// 1. 创建一个管道
	ch := make(chan int, 3)

	// 2. 向管道中写入数据
	ch <- 10
	ch <- 20
	ch <- 30
	// ch <- 40 // 管道已满，此处会阻塞

	// 3. 从管道中读取数据 先入先出
	a := <-ch
	fmt.Println(a) // 10
	<-ch
	b := <-ch
	fmt.Println(b) // 30

	// 4. 打印管道的长度和容量
	fmt.Printf("值: %v, 容量: %v, 长度: %v\n", ch, cap(ch), len(ch))
	// 值: 0xc00001e180, 容量: 3, 长度: 0

	// 5. 管道的数据类型 (引用数据类型)
	ch1 := make(chan int, 4)

	ch1 <- 10
	ch1 <- 20
	ch1 <- 30

	ch2 := ch1
	ch2 <- 25

	<-ch1
	<-ch1
	<-ch1
	d:= <-ch1
	fmt.Println(d) // 25


}